/*
    shm 共享内存写
*/

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>


//共享内存的文件名 文件大小
#define NAME "/my_shm"
#define SIZE 1024

int main()
{
    int *fp;
    // 创建或打开
    // 成功返回文件描述符 失败返回-1
    int fd = shm_open(NAME, O_CREAT | O_RDWR, S_IRUSR|S_IWUSR);
    if(fd == -1)
    {
        perror("文件打开失败\n");
        exit(1);
    }
    // 截断或扩展文件大小
    int ret = ftruncate(fd, SIZE);
    if(ret)
    {
        perror("文件扩展失败\n");
        exit(1);
    }
    // 映射,将共享内存映射为进程内地址空间
    char* ptr = (char*)mmap(NULL, SIZE, PROT_WRITE, MAP_SHARED, fd, 0);
    // 读写
    char *msg = "this is a line";
    strncpy(ptr, msg, strlen(msg)+1);
    // 取消映射
    munmap(ptr, SIZE);
    // 关闭
    close(fd);
    // 删除
    // shm_unlink();
    return 0;
}